home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / tcp_ip / wnos / wn941101 / sockcmd.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-10  |  2.2 KB  |  106 lines

  1. /* Socket status display code
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4. #include <stdio.h>
  5. #include "global.h"
  6. #include "config.h"
  7. #include "mbuf.h"
  8. #include "proc.h"
  9. #ifdef LZW
  10. #include "lzw.h"
  11. #endif
  12. #include "usock.h"
  13. #include "socket.h"
  14. #include "ax25.h"
  15. #include "netrom.h"
  16. #include "tcp.h"
  17. #include "udp.h"
  18. #include "commands.h"
  19.  
  20. /* Socket status display command */
  21. int
  22. dosock(argc,argv,p)
  23. int argc;
  24. char *argv[];
  25. void *p;
  26. {
  27.     struct usock *up;
  28.     int s, i;
  29.     struct sockaddr fsock;
  30.     char *cp;
  31.  
  32.     if(argc < 2){
  33.         tputs("S#  Type    PCB      Remote socket             Owner\n");
  34.         for(s = SOCKBASE; s < Nusock + SOCKBASE; s++) {
  35.             if((up = itop(s)) == NULLUSOCK)
  36.                 continue;
  37.  
  38.             i = sizeof(fsock);
  39.             cp = (getpeername(s,(char *)&fsock,&i) == 0 && i != 0)
  40.               ? psocket(&fsock) : "";
  41.  
  42.             tprintf("%3d %-8s%-8lx %-26s%-8lx %-10s\n",
  43.              s,Socktypes[up->type],ptol(up->cb.p),cp,
  44.              ptol(up->owner),up->owner->name);
  45.         }
  46.         return 0;
  47.     }
  48.     s = atoi(argv[1]);
  49.     if(s < SOCKBASE || s >= Nusock+SOCKBASE){
  50.         tputs("Number out of range\n");
  51.         return 1;
  52.     }
  53.     if((up = itop(s)) == NULLUSOCK){
  54.         tputs("Socket not in use\n");
  55.         return 0;
  56.     }
  57.  
  58.     tprintf("%s %lx %s",
  59.         Socktypes[up->type],
  60.         ptol(up->cb.p),
  61.         up->flag == SOCK_ASCII ? "ascii" : "binary");
  62.     if(up->eol[0] != '\0'){
  63.         tprintf(" eol seq:");
  64.         for(i = 0; up->eol[i] != '\0' && i < sizeof(up->eol); i++)
  65.             tprintf(" %02x",up->eol[i]);
  66.     }
  67.     tputs("\n");
  68.     if(up->cb.p == NULL)
  69.         return 0;
  70.     switch(up->type){
  71.     case TYPE_RAW:
  72.     case TYPE_LOCAL_DGRAM:
  73.         tprintf("Inqlen: %d packets\n",socklen(s,0));
  74.         tprintf("Outqlen: %d packets\n",socklen(s,1));
  75.         break;
  76.     case TYPE_LOCAL_STREAM:
  77.         tprintf("Inqlen: %d bytes\n",socklen(s,0));
  78.         tprintf("Outqlen: %d bytes\n",socklen(s,1));
  79.         break;
  80.     case TYPE_TCP:
  81.         st_tcp(up->cb.tcb);
  82.         break;
  83.     case TYPE_UDP:
  84.         st_udp(up->cb.udp);
  85.         break;
  86. #ifdef    AX25
  87.     case TYPE_AX25I:
  88.         st_ax25(up->cb.ax25);
  89.         break;
  90. #endif
  91. #ifdef    NETROM
  92.     case TYPE_NETROML4:
  93.         donrdump(up->cb.nr4);
  94.         break;
  95. #endif
  96.     }
  97. #ifdef LZW
  98.     if(up->zout != NULLLZW)
  99.         tprintf("Bytes compressed %ld\n",up->zout->cnt);
  100.     if(up->zin != NULLLZW)
  101.         tprintf("Bytes decompressed %ld\n",up->zin->cnt);
  102. #endif
  103.     return 0;
  104. }
  105.  
  106.